﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;
using System.IO;

using System.Collections;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

namespace Inference
{
    public static class RunEditForms
    {       
        /// <summary>
        /// Функция создания слота. 
        /// </summary>
        /// <param name="FrameID">ID фрейма,в котором создается слот.</param>               
        /// <returns>Возвращает ID созданного слота, -1 в случае неудачи.</returns>
        public static int CreateSlot(int FrameID, int FrameType)
        {
            Frames.SlotForm slotf = new Frames.SlotForm(Frames.Modes.CREATE_SLOT, Frames.Modes.EDIT_FRAME, FrameID, FrameType, -1, -1, true);
            DialogResult dr = slotf.ShowDialog();
            if (dr == DialogResult.OK)
                return 0;
            // return last slot index
            return -1;
        }

        /// <summary>
        /// Функция редактирования слота.
        /// </summary>
        /// <param name="SlotID"> ID редактируемого слота </param>       
        /// <returns></returns>
        public static int EditSlot(int SlotID, int FrameType)
        {
            Frames.SlotForm slotf = new Frames.SlotForm(Frames.Modes.EDIT_SLOT, Frames.Modes.EDIT_FRAME, -1, FrameType, SlotID, -1, true);
            DialogResult dr = slotf.ShowDialog();
            if (dr == DialogResult.OK)
                return 0;
            // return last slot index
            return -1;
        }

        /// <summary>
        /// Функция создания фрейма. 
        /// </summary>
        /// <param name="FrameID">Если фрейм создается как потомок - ID родителя. 
        ///     Если фрейм-сущность или фрейм-ситуация, данный параметр должен быть равен -1.</param>
        /// <param name="FrameType">Тип фрейма. 1 - ситуация, 2 - сущность.</param>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <returns>Возвращает ID созданного фрейма, -1 в случае неудачи.</returns>
        public static int CreateFrame(int FrameID, int FrameType, int X, int Y)
        {
            string header = (FrameType == 1) ? "фрейма-ситуации" : "фрейма-сущности";
            frmEditStringParameter fname = new frmEditStringParameter("","Создание нового " + header, (frmMain)Application.OpenForms["frmMain"],RenamingType.NewFrame);
            DialogResult dr = fname.ShowDialog();
            if (dr == DialogResult.OK)
            {
                Frames.FrameForm framef = new Frames.FrameForm(Frames.Modes.CREATE_FRAME, FrameID, fname.Value,FrameType, X, Y);
                dr = framef.ShowDialog();
                if (dr == DialogResult.OK)
                    return 0;
                // return last frame index NO RETURN - проверка на стороне визуала
            }
            return -1;
        }

        /// <summary>
        /// Функция редактирования фрейма.
        /// </summary>
        /// <param name="FrameID"> ID редактируемого фрейма </param>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <returns></returns>
        public static int EditFrame(int FrameID, int FrameType, int X, int Y)
        {            
            Frames.FrameForm framef = new Frames.FrameForm(Frames.Modes.EDIT_FRAME, FrameID,"",FrameType, X, Y);
            DialogResult dr = framef.ShowDialog();
            if (dr == DialogResult.OK)
                return 0;
            // no index return
            return -1;
        }

        public static int DeleteFrameV(int FrameID, int FrameType)
        {
            int success = 0;
            Frames.FrameForm framef = new Frames.FrameForm(Frames.Modes.EDIT_FRAME, FrameID,"", FrameType, 0, 0);
            success = framef.DeleteFrameFromVisual(FrameID, FrameType);            
            return success;
        }

        public static int DeleteSlotV(int SlotID, int FrameType)
        {
            int success = 0;
            Frames.SlotForm slotf = new Frames.SlotForm(Frames.Modes.EDIT_SLOT, Frames.Modes.EDIT_FRAME, -1, FrameType, SlotID, -1, true);
            success = slotf.DeleteSlotFromVisual(SlotID, FrameType);            
            return success;
        }
    }
}
